home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
source code vol 1.adf
/
BLITTERROUTS
/
BOBROUTINE.S
next >
Wrap
Text File
|
1999-09-26
|
10KB
|
558 lines
; BOBROUTINE BY PSYCHO OF DOMINATORS
HOWMANY = 30
>EXTERN "DF1:OBJECTS/BOB1",BRUSH1
>EXTERN "DF1:OBJECTS/BOBCOLS",COLLIST
>EXTERN "DF1:OBJECTS/KORDS",KORDS
ORG $38000
LOAD $38000
PICX=320 ; PIXELS
PICY=160 ; PIXELS
ANTAL_FARVER=32
ANTAL_BPL=3
ANTAL_BOBBPL=3
HALFBRITE=0
BRUSHX=32 ; PIXELS
BRUSHY=16 ; PIXELS
BRUSHXOFFSET=128-108+1 ; ANTAL EXTRA PIXELS
NUMBER_BRUSHES=HOWMANY-1
DIFI = 20
PICXWORD=PICX/16
PICXBYTE=PICX/8
BPLSIZE=PICXBYTE*PICY
PICSIZE=BPLSIZE*ANTAL_BPL
BRUSHXWORD=BRUSHX/16
BRUSHXBYTE=BRUSHX/8
BRUSHSIZE=BRUSHXBYTE*BRUSHY
START:
LEA $DFF000,A5
JSR INITIALIZE(PC)
JSR SETCOL(PC)
JSR SETUP_COPPERLIST1(PC)
JSR SETUPSCREEN(PC)
JSR CALC_CURSORPOS(PC)
JSR MOVEXYPOS(PC)
JSR SAVE_POSITIONS(PC)
JSR MOVEBRUSH(PC)
MOVE.L #0,STATUSPOS
MAIN_LOOP:
JSR MOVEXYPOS(PC)
JSR MOVEBRUSH(PC)
BTST #6,$BFE001
BNE.S MAIN_LOOP
JSR RESTORE
RTS
MOVEXYPOS:
JSR DOT(PC)
MOVE.L #NUMBER_BRUSHES,D0
LEA USEKORDS(PC),A4
LEA XPOS1(PC),A0
RED_LOOP:
MOVE.W (A4)+,(A0)+
MOVE.W (A4)+,(A0)+
DBRA D0,RED_LOOP
RTS
CLOSELIB=-414
EXECBASE=4
FORBID=-132
OPENLIB=-408
PERMIT=-138
;;; DOS.LIBRARY
CLOSE=-36
OPEN=-30
READ=-42
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; SUB-ROUTINES
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PAUSE:
SUBI #1,D0
BNE.S PAUSE
RTS
BLTCPTH=$048
BLTBPTH=$04C
BLTAPTH=$050
BLTDPTH=$054
BLTCMOD=$060
BLTBMOD=$062
BLTAMOD=$064
BLTDMOD=$066
BLTCON0=$040
BLTCON1=$042
BLTSIZE=$058
COP1LCH=$080
COPJMP1=$088
DMACON= $096
DMACONR=$002
VHPOSR= $006
SETUP_COPPERLIST1:
MOVE.L #BPL11,D0
LEA HI1(PC),A2
MOVE.W D0,6(A2)
LSR.L #8,D0
LSR.L #8,D0
MOVE.W D0,2(A2)
MOVE.L #BPL21,D0
MOVE.W D0,14(A2)
LSR.L #8,D0
LSR.L #8,D0
MOVE.W D0,10(A2)
MOVE.L #BPL31,D0
MOVE.W D0,22(A2)
LSR.L #8,D0
LSR.L #8,D0
MOVE.W D0,18(A2)
RTS
SETUP_COPPERLIST2:
LEA HI1(PC),A2
MOVE.L #BPL12,D0
MOVE.W D0,6(A2)
LSR.L #8,D0
LSR.L #8,D0
MOVE.W D0,2(A2)
MOVE.L #BPL22,D0
MOVE.W D0,14(A2)
LSR.L #8,D0
LSR.L #8,D0
MOVE.W D0,10(A2)
MOVE.L #BPL32,D0
MOVE.W D0,22(A2)
LSR.L #8,D0
LSR.L #8,D0
MOVE.W D0,18(A2)
RTS
CALC_CURSORPOS:
MOVE.L #0,A0
CLR.L D2
MOVE.W XPOS(PC),D2
LSR.L #3,D2
MOVE.W XPOS(PC),D3
ANDI.W #$000F,D3
LSL.L #8,D3
LSL.L #4,D3
ADDA.W D2,A0
MOVE.W D3,SMOOTHXPOS
MOVE.W YPOS(PC),D2
MULU #40,D2
ADDA.L D2,A0
MOVE.L A0,CURSOR_POSITION
RTS
RESTOREBEHIND_BRUSH1:
MOVE.B #3,D0
MOVE.W #BRUSHXWORD,D1
MOVE.W #BRUSHY,D2
MOVE.W #PICXBYTE-BRUSHXBYTE,D3
MOVE.W #PICXBYTE-BRUSHXBYTE,D4
MOVE.L #PICBUFFER1,A0
ADDI.L CURSOR_POSITION,A0
MOVE.L CURSOR_POSITION,A1
ADDI.L BAKSCR,A1
JSR SHOWSCREEN
RTS
SHOW_BRUSH1:
MOVE.B #3,D0
MOVE.W #BRUSHXWORD,D1
MOVE.W #BRUSHY,D2
CLR.L D3
MOVE.W #PICXBYTE-BRUSHXBYTE,D4
MOVE.W SMOOTHXPOS(PC),D5
MOVE.L #BRUSH1,A0
MOVE.L BAKSCR(PC),A1
ADDI.L CURSOR_POSITION(PC),A1
MOVE.L #BRUSHMASK1,A2
JSR SHOWBRUSH(PC)
RTS
MOVEBRUSH:
MOVEBRUSH_WAIT:
CMP.B #$FF,$006(A5)
BNE.S MOVEBRUSH_WAIT
CMP.L #0,STATUSSCR
BEQ.S SECOND_FRONT
CMP.L #1,STATUSSCR
BEQ.S FIRST_FRONT
CONT:
MOVE.W #$8400,DMACON(A5)
BSR.L RESTORE_BRUSHES
BSR.L SHOW_BRUSHES
BSR.L SAVE_POSITIONS
MOVE.W #$0400,DMACON(A5)
RTS
FIRST_FRONT:
MOVE.L #0,STATUSSCR
LEA RESSCR(PC),A2
MOVE.L #SCREENBUFFER1,(A2)
MOVE.L #SCREENBUFFER2,4(A2)
MOVE.L #OLDXPOS1,OLDXPOSPOINTER
JSR SETUP_COPPERLIST1(PC)
BRA.S CONT
SECOND_FRONT:
MOVE.L #1,STATUSSCR
LEA RESSCR(PC),A2
MOVE.L #SCREENBUFFER2,(A2)
MOVE.L #SCREENBUFFER1,4(A2)
MOVE.L #OLDXPOS2,OLDXPOSPOINTER
JSR SETUP_COPPERLIST2(PC)
BRA.L CONT
SAVE_POSITIONS:
LEA XPOS1,A0
MOVE.L OLDXPOSPOINTER,A1
MOVE.L #NUMBER_BRUSHES,D0
SAVE_LOOP:
MOVE.W (A0)+,(A1)+
MOVE.W (A0)+,(A1)+
DBRA D0,SAVE_LOOP
RTS
RESTORE_BRUSHES:
LEA XPOS,A0
MOVE.L OLDXPOSPOINTER,A1
MOVE.L #NUMBER_BRUSHES,D0
RESTORE_LOOP:
MOVE.W (A1)+,(A0)
MOVE.W (A1)+,2(A0)
MOVEM.L A0-A6/D0-D7,-(A7)
JSR CALC_CURSORPOS
JSR RESTOREBEHIND_BRUSH1
MOVEM.L (A7)+,A0-A6/D0-D7
DBRA D0,RESTORE_LOOP
RTS
SHOW_BRUSHES:
LEA XPOS(PC),A0
LEA XPOS1(PC),A1
MOVE.L #NUMBER_BRUSHES,D0
SHOW_LOOP:
MOVE.W (A1)+,(A0)
MOVE.W (A1)+,2(A0)
MOVEM.L A0-A6/D0-D7,-(A7)
JSR CALC_CURSORPOS(PC)
JSR SHOW_BRUSH1(PC)
MOVEM.L (A7)+,A0-A6/D0-D7
DBRA D0,SHOW_LOOP
RTS
SETUPSCREEN:
MOVE.W #$8100,DMACON(A5)
MOVE.W #$8040,DMACON(A5)
MOVE.W #$0020,DMACON(A5)
MOVE.W #ANTAL_BPL,D0
MULU #$1000,D0
ORI.W #$0280,D0
MOVE.W D0,BPLCON0+2
MOVE.W #$0080,DMACON(A5)
MOVE.L #COPPERLIST,COP1LCH(A5)
MOVE.W COPJMP1(A5),D0
MOVE.W #$8080,DMACON(A5)
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; INITIALIZE
;;; RESTORE
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STARTLIST=38
INITIALIZE:
MOVE.W #$7FFF,$DFF09A
MOVE.L $4,A6
RESTORE_COPPER:
LEA GRAPHICS_LIBRARY(PC),A1
CLR.L D0
JSR OPENLIB(A6)
MOVE.L D0,A1
MOVE.L STARTLIST(A1),OLDCOPPER
JSR CLOSELIB(A6)
RTS
RESTORE:
MOVE.W #$4000,$DFF09A
MOVE.W #$E02C,$DFF09A
MOVE.L EXECBASE,A6
RESTORE_SOUND:
MOVE.W #$000F,$DFF096
MOVE.L OLDCOPPER(PC),$DFF080
CLR.W $DFF088
MOVE.W #$83E0,$DFF096
RTS
GRAPHICS_LIBRARY:
DC.B 'graphics.library',0
EVEN
OLDCOPPER:
DC.L 0
EVEN
SHOWSCREEN:
MOVE.W D1,D7
MULU D2,D7
LSL.L #1,D7
MOVE.W D2,D6
LSL.L #6,D6
ADDI.W D1,D6
SHOWSCREEN_WAIT:
BTST #14,DMACONR(A5)
BNE SHOWSCREEN_WAIT
MOVE.L A0,BLTAPTH(A5)
MOVE.L A1,BLTDPTH(A5)
MOVE.W D3,BLTAMOD(A5)
MOVE.W D4,BLTDMOD(A5)
MOVE.W #$0000,BLTCON1(A5)
MOVE.W #$09F0,BLTCON0(A5)
MOVE.W D6,BLTSIZE(A5)
ADDI.L #BPLSIZE,A0
ADDI.L #BPLSIZE,A1
SUBI.B #1,D0
BNE SHOWSCREEN_WAIT
RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; SHOWBRUSH
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; IN:
;;; D0(B) ANTAL BIT PLANER
;;; D1(W) X-SIZE (WORDS)
;;; D2(W) Y-SIZE (LINES)
;;; D3(W) SOURCE MODULO
;;; D4(W) DESTINATION MODULO
;;; D5(W) SMOOTH X-POSITION
;;;
;;; A0(L) SOURCE BUFFER
;;; A1(L) DESTINATION BUFFER
;;; A2(L) SOURCE MASK
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; OUT:
;;; D0(B) 0
;;; D1(W) X-SIZE (WORDS)
;;; D2(W) Y-SIZE (LINES)
;;; D3(W) SOURCE MODULO
;;; D4(W) DESTINATION MODULO
;;; D5(W) BLTCON0
;;; D6(W) BLTSIZE
;;; D7(L) BIT-PLANE SIZE (BYTES)
;;;
;;; A0(L) END OF SOURCE BUFFER
;;; A1(L) END OF DESTINATION BUFFER
;;; A2(L) END OF SOURCE MASK
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHOWBRUSH:
MOVE.W D1,D7
MULU D2,D7
LSL.L #1,D7
MOVE.W D2,D6
LSL.L #6,D6
ADDI.W D1,D6
SHOWBRUSH_WAIT:
BTST #14,DMACONR(A5)
BNE.S SHOWBRUSH_WAIT
MOVE.L A2,BLTAPTH(A5)
MOVE.L A0,BLTBPTH(A5)
MOVE.L A1,BLTCPTH(A5)
MOVE.L A1,BLTDPTH(A5)
MOVE.W D3,BLTAMOD(A5)
MOVE.W D3,BLTBMOD(A5)
MOVE.W D4,BLTCMOD(A5)
MOVE.W D4,BLTDMOD(A5)
ANDI.W #$F000,D5
MOVE.W D5,BLTCON1(A5)
ORI.W #$0FCA,D5
MOVE.W D5,BLTCON0(A5)
MOVE.W D6,BLTSIZE(A5)
MOVE.L #$FFFFFFFF,$044(A5)
ADDI.L D7,A0 ; HUSK
ADDI.L #BPLSIZE,A1 ; HUSK
SUBI.B #1,D0
BNE.S SHOWBRUSH_WAIT
RTS
SETCOL:
STORE: LEA COLLIST(PC),A0
LEA COLOUR1+2(PC),A1
MOVE.W #7,D0
FILL2: MOVE.W (A0)+,(A1)
ADDA.L #4,A1
DBF D0,FILL2
RTS
DOT:
MOVEM.L A0-A6/D0-D7,-(A7)
CLR.L D0
CLR.L D1
CLR.L D2
CLR.L D3
CLR.L D4
CLR.L D5
CLR.L D6
LEA USEKORDS(PC),A0
LEA KORDPOS(PC),A2
MOVE.B #HOWMANY,D6
MOVE.B GETX(PC),D0
MOVE.B GETX+1(PC),D1
MOVE.B GETX+2(PC),D2
MOVE.B GETX+3(PC),D3
MAKELOOP1:
MOVE.L (A2),A1
ADDA.L D0,A1
MOVE.B (A1),D4
LSR.B #1,D4
MOVE.L (A2),A1
ADDA.L D1,A1
MOVE.B (A1),D7
LSR.B #1,D7
ADD.B D7,D4
MOVE.W D4,(A0)+
MOVE.L (A2),A1
ADDA.L D2,A1
MOVE.B (A1),D5
LSR.B #1,D5
MOVE.L (A2),A1
ADD.L D3,A1
MOVE.B (A1),D7
LSR.B #1,D7
ADD.B D7,D5
LSR.B #1,D5
ADDI.B #$05,D5
MOVE.W D5,(A0)+
LEA SINUSPARMS(PC),A6
MOVE.L (A6),A6
ADD.B 2(A6),D0
ADD.B 3(A6),D1
SUB.B 4(A6),D2
SUB.B 5(A6),D3
DBF D6,MAKELOOP1
LEA GETX(PC),A0
LEA SPEED(PC),A1
MOVE.L (A1),A1
MOVE.B #$04,D0
MAKELOOP2:
MOVE.B (A0),D1
MOVE.B (A1)+,D2
ADD.B D2,D1
MOVE.B D1,(A0)+
DBF D0,MAKELOOP2
MOVEM.L (A7)+,A0-A6/D0-D7
RTS
GETX: DC.L $00000000
SPEEDPARMS:
SPEED1:DC.B $03 ; SPEED X1
SPEED2:DC.B $02 ; SPEED X2
SPEED3:DC.B $01 ; SPEED Y1
SPEED4:DC.B $03 ; SPEED Y2
SINUSPARAMETERS:
PARM1: DC.W $00 ; UNUSED
PARM2: DC.B $6 ; WITH BETWEEN DOTS X1
PARM3: DC.B $7 ; WITH BETWEEN DOTS X2
PARM4: DC.B $8 ; WITH BETWEEN DOTS Y1
PARM5: DC.B $9 ; WITH BETWEEN DOTS Y2
PARM6: DC.B $00 ; UNUSED
EVEN
DUMMY: DC.L $00000000
SPEED: DC.L SPEEDPARMS
SINUSPARMS: DC.L SINUSPARAMETERS
KORDPOS: DC.L KORDS
USEKORDS:
BLK.W HOWMANY*8+4,$0004
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; CHIP ADDRESSES
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
STATUSSCR: DC.L 0
RESSCR: DC.L SCREENBUFFER1
BAKSCR: DC.L SCREENBUFFER2
CURSOR_POSITION:DC.L PICXBYTE*16
SHADOW_POSITION:DC.L 0
STATUSPOS: DC.L 0
XPOS: DC.W 1
YPOS: DC.W 1
XPOS1: BLK.W 200
OLDXPOSPOINTER: DC.L 0
OLDXPOS1: BLK.W 200
OLDXPOS2: BLK.W 200
SMOOTHXPOS: DC.W 0
SMOOTHXPOS2: DC.W 0
COPPERLIST:
DC.W $1001,$FFFE
DC.W $0100,$0200
DC.W $2001,$FFFE
DC.W $008E,$1C61
DC.W $0090,$10F1
DC.W $0092,$0038
DC.W $0094,$00D0
DC.W $0108,$0000
BPLCON0:DC.W $0100,$3200
HI1: DC.W $00E0,0
LO1: DC.W $00E2,0
HI2: DC.W $00E4,0
LO2: DC.W $00E6,0
HI3: DC.W $00E8,0
LO3: DC.W $00EA,0
COLOUR1:
DC.W $0180,$0333
DC.W $0182,$0111
DC.W $0184,$0222
DC.W $0186,$0333
DC.W $0188,$0444
DC.W $018A,$0555
DC.W $018C,$0666
DC.W $018E,$0777
DC.W $BC01,$FFFE
DC.W $0100,$0200
DC.W $FFFF,$FFFE ;END COPPER LIST
BRUSH1: BLK.B BRUSHSIZE*ANTAL_BOBBPL,$FF
BRUSHMASK1: BLK.B BRUSHSIZE,$FF
COLLIST: BLK.B 64
PICBUFFER1: BLK.B BPLSIZE,0
PICBUFFER2: BLK.B BPLSIZE,0
PICBUFFER3: BLK.B BPLSIZE,0
SCREENBUFFER1:
BPL11: BLK.B BPLSIZE,0
BPL21: BLK.B BPLSIZE,0
BPL31: BLK.B BPLSIZE,0
SCREENBUFFER2:
BPL12: BLK.B BPLSIZE,0
BPL22: BLK.B BPLSIZE,0
BPL32: BLK.B BPLSIZE,0
KORDS: BLK.B 4000,0
END: